Technical Field
The present invention relates to the field of distributed computing and in particular, to apparatus, systems, and methods to facilitate deployment of cloud based applications across heterogeneous cloud computing infrastructures.
Description of Related Art
The performance of computing applications may often be increased by distributing the computational workload across a networked cluster of computers. A physical networked cluster of computers with attendant software facilitating virtualization is often referred to as a “cloud” or “cloud infrastructure” or simply an infrastructure. Clouds may thus be viewed as tangible physical hardware that are encapsulated with layers of software to facilitate the viewing of the underlying hardware as computational units. Cloud computing facilitates on-demand access to resources, which may be rapidly scaled up or down in proportion to user requirements.
Clouds may be public and/or private. For example, publicly available clouds or “public clouds”, may be accessed programmatically (e.g. using Application Programming Interfaces (APIs)) over the Internet and may be made available as virtual machines (VMs) on a pay-per-use basis by third parties to customers. On the other hand, organizations may have private clouds for use by employees or customers within an enterprise's data center and/or may use a hybrid cloud, which may be a combination of public-private clouds to deploy and run applications.
When a cloud based application is deployed on a cloud, resources for the application may be provisioned, and one more services that components of the application depend upon may be started in some specified order in a process termed orchestration. Cloud orchestration refers to processes to automate (at least partially) a variety of tasks related to managing and coordinating resource deployment on a cloud.
Conventional techniques for cloud orchestration may give rise to inefficiencies, may create bottlenecks, and may also decrease fault tolerance. For example, even when one or more portions of the orchestration can be automated, many deployment choices are made manually. As one example, manual intervention in orchestration may be related to conditions, policies, or deployment scenarios that are related to the context of deployment and not directly related to the cloud based application being deployed.
As one example, a cloud based application may be deployed for development and/or testing purposes (e.g. after an update, before production deployment, to test bug fixes etc). For such development and/or testing purposes, a user may want to limit costs and prefer to deploy the application to a first cloud (e.g. a public cloud), place all application services into one VM, log one or more events related to application debugging, and automatically shut down the cloud based application within some specified time period. In contrast, at production time, the user may prefer to deploy the same application to a second cloud (e.g. a highly secure private cloud) with a service-level guarantee, distribute services associated with the cloud based application across Virtual Machines (VMs) in the second cloud, allow scaling of one or more tiers of the cloud based application, and/or log events for performance monitoring. In conventional orchestration schemes, in the example above, users may need to: make several manual choices at deployment time to orchestrate the deployment of the application. The orchestration difficulties above may be compounded because conventional cloud based applications are typically cloud-specific—i.e. each implementation of the cloud based application is for a specific cloud. Therefore, in addition to differences in orchestration from one cloud to another and differences in the context in which deployment occurs, users may also need to account for differences in implementation of the cloud based application for each cloud, thereby compounding the complexity, cost, and inefficiencies associated with cloud based application deployment, while limiting flexibility.
As a consequence of the difficulties outlined above, which arise from problems rooted in cloud computing technology and cloud based application deployment on cloud computing infrastructures, apparatus, methods and techniques to provide improvements to cloud computing technology and cloud based application deployment on cloud computing infrastructures are desired.